package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * 集合的遍历                die
 * 集合提供了统一遍历元素的操作，迭代器模式
 * 方法:
 * Iterator iterator()
 *
 * java.util.Iterator接口，迭代器接口。规定了迭代器遍历集合的相关操作
 * 迭代器遍历集合遵循的原则为问，取，删(删除不是遍历过程中的必须操作)
 * 不同集合都提供了一个用于遍历自身元素的迭代器实现类，我们无需记住，只当他们是迭代器使用即可。
 */
public class IteratorDemo {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        /*
            boolean add(E e)
         */
        c.add("one");
        c.add("#");
        c.add("two");
        c.add("#");
        c.add("three");
        c.add("#");
        c.add("four");
        c.add("#");
        c.add("five");
        System.out.println(c);

        Iterator it = c.iterator();
        /*
            boolean hasNext()
            通过迭代器询问集合是否还有下一个元素可以遍历。
            注:迭代器的起始位置是第一个元素之前，因此第一次调用就是询问是否有第一个元素
            该方法不影响迭代器遍历元素的位置。

            E next()
            迭代器向后移动一个位置并获取该元素
         */
        while(it.hasNext()){
            String str = (String)it.next();
            if("#".equals(str)){
                /*
                    迭代器要求在遍历的过程中不能通过集合的方法增删元素，否则抛出异常
                    java.util.ConcurrentModificationException
                 */
//                c.remove(str);
                /*
                    迭代器的remove可以从集合中删除本次通过next方法获取的元素
                 */
                it.remove();
            }
            System.out.println(str);
        }
        System.out.println(c);
    }
}






